package com.bgds.sys.common.utils;/**


/**
 * @Description
 * @Author lj
 * @create: 2020-07-17 14:48
 */
public class HexUtil {
    /**
     * 字节流转成十六进制表示
     */
    public static String encode(byte[] src) {
        String strHex = "";
        StringBuilder sb = new StringBuilder("");
        for (int n = 0; n < src.length; n++) {
            strHex = Integer.toHexString(src[n] & 0xFF);
            // 每个字节由两个字符表示，位数不够，高位补0
            sb.append((strHex.length() == 1) ? "0" + strHex : strHex);
        }
        return sb.toString().trim();
    }

    /**
     * 字符串转成字节流
     */
    public static byte[] decode(String src) {
        int m = 0, n = 0;
        // 每两个字符描述一个字节
        int byteLen = src.length() / 2;
        byte[] ret = new byte[byteLen];
        for (int i = 0; i < byteLen; i++) {
            m = i * 2 + 1;
            n = m + 1;
            int intVal = Integer.decode("0x" + src.substring(i * 2, m) + src.substring(m, n));
            ret[i] = Byte.valueOf((byte)intVal);
        }
        return ret;
    }
    //     转化十六进制编码为字符串
    public static String toStringHex(String s)
    {
        byte[] baKeyword = new byte[s.length()/2];
        for(int i = 0; i < baKeyword.length; i++)
        {
            try
            {
                baKeyword[i] = (byte)(0xff & Integer.parseInt(s.substring(i*2, i*2+2),16));
            }
            catch(Exception e)
            {
                e.printStackTrace();
            }
        }

        try
        {
            s = new String(baKeyword, "utf-8");
        }
        catch (Exception e1)
        {
            e1.printStackTrace();
        }
        return s;
    }
    public static void main(String[] args) {
        String str = "\n" +
                "H5SD01\n" +
                "(7, '2020-04-22 11:35:53', '2020-04-22 11:35:50', 13, 'H5SD01', NULL, '{\\\"propertyList\\\":[{\\\"fixedLength\\\":4,\\\"precision\\\":0,\\\"propertyType\\\":\\\"STRING\\\",\\\"propertyId\\\":\\\"50963\\\"},{\\\"fixedLength\\\":20,\\\"precision\\\":0,\\\"propertyType\\\":\\\"STRING\\\",\\\"propertyId\\\":\\\"50964\\\"},{\\\"fixedLength\\\":10,\\\"precision\\\":0,\\\"propertyType\\\":\\\"STRING\\\",\\\"propertyId\\\":\\\"50965\\\"},{\\\"fixedLength\\\":14,\\\"precision\\\":0,\\\"propertyType\\\":\\\"STRING\\\",\\\"propertyId\\\":\\\"50966\\\"},{\\\"fixedLength\\\":1,\\\"precision\\\":0,\\\"propertyType\\\":\\\"INT\\\",\\\"propertyId\\\":\\\"50967\\\"},{\\\"fixedLength\\\":20,\\\"precision\\\":0,\\\"propertyType\\\":\\\"STRING\\\",\\\"propertyId\\\":\\\"50968\\\"},{\\\"fixedLength\\\":10,\\\"precision\\\":0,\\\"propertyType\\\":\\\"STRING\\\",\\\"propertyId\\\":\\\"50969\\\"},{\\\"fixedLength\\\":1,\\\"precision\\\":0,\\\"propertyType\\\":\\\"STRING\\\",\\\"propertyId\\\":\\\"50970\\\"},{\\\"fixedLength\\\":100,\\\"precision\\\":0,\\\"propertyType\\\":\\\"STRING\\\",\\\"propertyId\\\":\\\"50971\\\"},{\\\"fixedLength\\\":10,\\\"precision\\\":6,\\\"propertyType\\\":\\\"FLOAT\\\",\\\"propertyId\\\":\\\"50972\\\"},{\\\"fixedLength\\\":7,\\\"precision\\\":3,\\\"propertyType\\\":\\\"FLOAT\\\",\\\"propertyId\\\":\\\"50973\\\"},{\\\"fixedLength\\\":9,\\\"precision\\\":0,\\\"propertyType\\\":\\\"INT\\\",\\\"propertyId\\\":\\\"50974\\\"},{\\\"fixedLength\\\":9,\\\"precision\\\":3,\\\"propertyType\\\":\\\"FLOAT\\\",\\\"propertyId\\\":\\\"50975\\\"},{\\\"fixedLength\\\":9,\\\"precision\\\":3,\\\"propertyType\\\":\\\"FLOAT\\\",\\\"propertyId\\\":\\\"50976\\\"},{\\\"fixedLength\\\":6,\\\"precision\\\":0,\\\"propertyType\\\":\\\"STRING\\\",\\\"propertyId\\\":\\\"50977\\\"},{\\\"fixedLength\\\":12,\\\"precision\\\":0,\\\"propertyType\\\":\\\"STRING\\\",\\\"propertyId\\\":\\\"50978\\\"},{\\\"fixedLength\\\":5,\\\"precision\\\":0,\\\"propertyType\\\":\\\"INT\\\",\\\"propertyId\\\":\\\"50979\\\"},{\\\"fixedLength\\\":15,\\\"precision\\\":6,\\\"propertyType\\\":\\\"FLOAT\\\",\\\"propertyId\\\":\\\"50980\\\"},{\\\"fixedLength\\\":50,\\\"precision\\\":0,\\\"propertyType\\\":\\\"STRING\\\",\\\"propertyId\\\":\\\"50981\\\"},{\\\"fixedLength\\\":10,\\\"precision\\\":6,\\\"propertyType\\\":\\\"FLOAT\\\",\\\"propertyId\\\":\\\"50982\\\"},{\\\"fixedLength\\\":7,\\\"precision\\\":3,\\\"propertyType\\\":\\\"FLOAT\\\",\\\"propertyId\\\":\\\"50983\\\"},{\\\"fixedLength\\\":9,\\\"precision\\\":0,\\\"propertyType\\\":\\\"INT\\\",\\\"propertyId\\\":\\\"50984\\\"},{\\\"fixedLength\\\":4,\\\"precision\\\":0,\\\"propertyType\\\":\\\"STRING\\\",\\\"propertyId\\\":\\\"50985\\\"},{\\\"fixedLength\\\":300,\\\"precision\\\":0,\\\"propertyType\\\":\\\"STRING\\\",\\\"propertyId\\\":\\\"50986\\\"},{\\\"fixedLength\\\":2000,\\\"precision\\\":0,\\\"propertyType\\\":\\\"STRING\\\",\\\"propertyId\\\":\\\"50987\\\"},{\\\"fixedLength\\\":700,\\\"precision\\\":0,\\\"propertyType\\\":\\\"STRING\\\",\\\"propertyId\\\":\\\"50988\\\"}]}')";
        System.out.println("test string : "+str);

        String hexEncode = HexUtil.encode(str.getBytes());
        System.out.println("HexUtil.encode Result : "+hexEncode);

        byte[] bytes = HexUtil.decode(hexEncode);
        System.out.println("HexUtil.decode Result : "+new String(bytes));
    }
}
